package com.haixiaoke.saas.repository.electronicVisa.service;

import com.haixiaoke.saas.repository.electronicVisa.api.DescribeTemplates;
import com.haixiaoke.saas.repository.pojo.OrgElectronicVisa;
import com.haixiaoke.saas.repository.electronicVisa.pojo.ElectronicVisaContract;
import com.haixiaoke.saas.repository.electronicVisa.utils.CreateFlowUtils;
import com.tencentcloudapi.common.exception.TencentCloudSDKException;
import com.tencentcloudapi.essbasic.v20210526.EssbasicClient;
import com.tencentcloudapi.essbasic.v20210526.models.*;
import org.springframework.stereotype.Service;

import static com.haixiaoke.saas.repository.electronicVisa.utils.CreateFlowUtils.initClient;
import static com.haixiaoke.saas.repository.electronicVisa.utils.CreateFlowUtils.setAgent;


/**
 * @author qixi
 * @date 2023/12/21
 */
@Service
public class TencentElectronicVisaService {


    /**
     * 生成子客登录链接
     * @return
     */
    public CreateConsoleLoginUrlResponse createConsoleLoginUrl(Agent agent,String proxyOrganizationName) {
        try {

            // 实例化一个client
            EssbasicClient client = initClient();
            // 实例化一个请求对象,每个接口都会对应一个request对象
            CreateConsoleLoginUrlRequest req = new CreateConsoleLoginUrlRequest();

            agent.setProxyAppId("");
            req.setAgent(agent);

            req.setProxyOrganizationName(proxyOrganizationName);

            // 返回的resp是一个CreateConsoleLoginUrlResponse的实例，与请求对象对应
            return client.CreateConsoleLoginUrl(req);
        } catch (TencentCloudSDKException e) {
            System.out.println(e.toString());
        }
        return null;
    }




        public  DescribeTemplatesResponse describeTemplates(ElectronicVisaContract bean) {
            try {

                OrgElectronicVisa orgElectronicVisa = bean.getOrgElectronicVisa();
                Agent agent = CreateFlowUtils.setAgent(orgElectronicVisa.getProxyOrganizationOpenId(),bean.getOperatorId());

                // 实例化一个client
                EssbasicClient client = initClient();
                // 实例化一个请求对象,每个接口都会对应一个request对象
                DescribeTemplatesRequest req = new DescribeTemplatesRequest();
                req.setAgent(agent);

                // 查询模板的内容
                // 0：（默认）模板列表及详情
                // 1：仅模板列表, 不会返回模板中的签署控件, 填写控件, 参与方角色列表等信息
                req.setContentType(0L);

                // 返回控件的范围, 是只返回发起方自己的还是所有参与方的
                // false：（默认）只返回发起方控件
                // true：返回所有参与方(包括发起方和签署方)控件
                req.setQueryAllComponents(false);

                //是否获取模板预览链接。
                // false：不获取（默认）
                // true：获取
                req.setWithPreviewUrl(true);
                // req.setWithPdfUrl(true);

                // 返回的resp是一个DescribeTemplatesResponse的实例，与请求对象对应
                return client.DescribeTemplates(req);
            } catch (TencentCloudSDKException e) {
                System.out.println(e.toString());
            }
            return null;
        }

        /**
         * 测试
         */
        public static void main(String[] args) {
            try {
                String TemplateId = "***************";

                Agent agent = setAgent();

                DescribeTemplatesResponse templatesResponse = DescribeTemplates.describeTemplates(agent, TemplateId);
                assert templatesResponse != null;
                TemplateInfo[] templates = templatesResponse.getTemplates();

                System.out.println(DescribeTemplatesResponse.toJsonString(templatesResponse));
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

}
